/*
 * kalman.h
 *
 *  Created on: 2023��8��8��
 *      Author: 22575
 */

#ifndef KALMAN_H_
#define KALMAN_H_
// #include "zf_common_headfile.h"
// typedef unsigned char   uint8  ;    //  8 bits
// typedef unsigned int    uint16 ;    // 16 bits
// typedef unsigned long   uint32 ;    // 32 bits
//
//
// typedef signed char     int8   ;    //  8 bits
// typedef signed int      int16  ;    // 16 bits
// typedef signed long     int32  ;    // 32 bits
//
//
// typedef volatile int8   vint8  ;    //  8 bits
// typedef volatile int16  vint16 ;    // 16 bits
// typedef volatile int32  vint32 ;    // 32 bits
//
//
// typedef volatile uint8  vuint8 ;    //  8 bits
// typedef volatile uint16 vuint16;    // 16 bits
// typedef volatile uint32 vuint32;    // 32 bits
// #include "zf_common_headfile.h" // 添加新的头文件
// һ�׹����˲���LPF
typedef struct
{
    float alpha; // �˲�ϵ��
    int last_out;
} lpf_controller;

extern lpf_controller lpf_controller_l, lpf_controller_r;

extern lpf_controller lpf_load;

// �������˲���KF
typedef struct
{
    float LastP; // �ϴι���Э����
    float Now_P; // ��ǰ����Э����
    float out;   // �������˲������
    float Kg;    // ����������
    float Q;
    float R;
} kalman_controller;

extern kalman_controller R_encoderkal, L_encoderkal;
extern float R_Q, R_R;
extern float L_Q, L_R;

extern kalman_controller kalman_controller_q, kalman_controller_h, kalman_controller_d3, kalman_controller_d4;

extern kalman_controller kalman_err_q, kalman_err_h, kalman_err_d, kalman_sensor[7];

extern float q_Q, q_R;
extern float h_Q, h_R;
extern float d_Q, d_R;

void lpf_init(lpf_controller *lpf);
// ����ֵΪ�����˲����
int lpf_update(lpf_controller *lpf, int input);
void kalman_init(kalman_controller *klm, float klm_Q, float klm_R);
float kalman_update(kalman_controller *klm, float input);

#endif /* KALMAN_H_ */
